strlen```放在这里真是不懂??

来源:百度知道 编辑:UC知道 时间:2024/06/30 10:42:15
#include <sting.h>
main()
{ char p[20]={'a','b','c','d'} q[]="abc",r[]="abcded";
strcpy(p+strlen(q),r);strcat(p,q);
printf("%d%d\n",sizeof(p),strlen(p));
程序运行的结果是
A 20 9;
B 9 9;
C 20 11;
D 11 11;
答案是C,不知道为什么?
里面(p+strlen(q))这个到底是什么意思啊!我不是很理解啊!??
指点哈阿!!

如果你的题没有抄错的话结果应该是2012
(p+strlen(q))
strlen的意思是计算q的长度
p+x的意思是以p为首地址,向后加上x
strlen(q)的就过是3
p+3就是p加3个地址,就是p[3]的地址
strcpy(p+strlen(q),r);就是把以r为首地址的字符串复制到以&p[3]为首地址的空间去
所以执行完strcpy后,p数组表示的就是"abcabcded"

strcat(p,q);是将q连接到p
p就是表示"abcabcdedabc"

sizeof(p)p从始至终就是20个空间,所以是20
strlen(p)p的字符串长度是12
所以结果是2012

sting.h -- string.h

char p[20]={'a','b','c','d'} q[]="abc",r[]="abcded";
char p[20]={'a','b','c','d'}, q[]="abc",r[]="abcde"; -- 漏1 逗号,r多一个d
答案是C.

strlen(q), q[] 的长度是3。所以 strcpy 第一个参数 是指针p初始位置加3,也就是从p[3]位置起 复制r
strcpy(p+3,r);
复制前 abcd, 复制后 abcabcde
strcat(p,q); 后,p变 abcabcdeabc
sizeof(p) -- p 内存大小 20
strlen(p) -- p 内容 长度 11 [abcabcdeabc -- 11 个字母]

p是数组名,是个char*指针地址,即数组首地址。stlen(q)返回值4,指针和数字做加运算代表什么?就是把指针的指向向后移4个单位,结果仍然是个指针类型啊。C语言书里讲